
import numpy as np
import pandas as pd
import math
def do(np,pd):

    ex1=pd.read_excel('./18级高一体测成绩汇总.xls')
    ex2=pd.read_excel('./18级高一体测成绩汇总.xls',sheet_name = 1)
    ex3=pd.read_excel('./体侧成绩评分表.xls', header=[0, 1])
    #4、数据类型转换

 # 男1000米跑，数据类型是str，并且是4’26这种形式，需要变成float类型的值
    ex1c = ex1.copy()
    ex1c['男1000米跑'] = ex1c['男1000米跑'].str.replace('\'','.').map(lambda x: 0.0 if math.isnan(float(x))==True else x)
    print('男1000米跑，数据类型是str，并且是4’26这种形式，需要变成float类型的值')
    print(ex1c)
    #4.1
    ex3c = ex3.copy()
    # ex3c['男1000米跑']['成绩']=  ex3c['男1000米跑']['成绩'].str.replace('"','').replace('\'','.').map(lambda x: 0.0 if math.isnan(float(x))==True else x)
    # ex3c['女800米跑']['成绩']=  ex3c['女800米跑']['成绩'].str.replace('"','').replace('\'','.').map(lambda x: 0.0 if math.isnan(float(x))==True else x)
    # 评分标准中男1000米跑和女800米跑的成绩都是4‘10’‘这种形式，需要转化为float类型值

    woman=  ex3c['女800米跑'].copy()

    mans=  ex3c['男1000米跑'].copy()
    mans['成绩']=  mans['成绩'].str.replace('\'','.').str.replace('"','').map(lambda x: 0.0 if math.isnan(float(x))==True else x)
    woman['成绩']=  woman['成绩'].str.replace('\'','.').str.replace('"','').map(lambda x: 0.0 if math.isnan(float(x))==True else x)
        # .map(lambda x: 0.0 if math.isnan(float(x))==True else x)
    # ex3c['女800米跑']['成绩']=  ex3c['女800米跑']['成绩'].str.replace('\'','.').str.replace('"','').map(lambda x: 0.0 if math.isnan(float(x))==True else x)
    ex3c['女800米跑']=woman
    ex3c['男1000米跑']=mans
    #4.2其他所有数值类型的值，都要转换为float类型的值


    ex1c.loc[:,('男1000米跑','男50米跑','男跳远','男体前屈','男引体','身高','体重','BMI')]=ex1c.loc[:,('男1000米跑','男50米跑','男跳远','男体前屈','男引体','身高','体重','BMI')].astype(float)
    print('其他所有数值类型的值，都要转换为float类型的值')
    print(ex1c)
    #5
    ex2c = ex1c.copy()
    # ex2c.loc[:,'男1000米跑']=ex2c.loc[:,'男1000米跑'].map(lambda x:x*)
    #man 1000
    # 对体测成绩进行分数转换，跑步类（越小越好）；跳远、体前屈（越大越好）
    # 不知道公式，先空着
    # 男生成绩
    print('对体测成绩进行分数转换，跑步类（越小越好）；跳远、体前屈（越大越好')

    rule = pd.read_excel('./体侧成绩评分表.xls', header=[0, 1])
    rule = rule.replace("'", ".", regex=True)
    rule = rule.replace('"', "", regex=True)
    rule = rule.astype(float)
    male = pd.read_excel('./18级高一体测成绩汇总.xls')
    male['男1000米跑'] = male['男1000米跑'].str.replace("'", ".")
    male['男1000米跑'] = pd.to_numeric(male['男1000米跑'], errors='coerce').fillna(0)
    male[['男体前屈', '男引体', '男肺活量', 'BMI']] = male[['男体前屈', '男引体', '男肺活量', 'BMI']].astype(float)

    female = pd.read_excel('./18级高一体测成绩汇总.xls', sheet_name=1)
    female[['女体前屈', '女仰卧', '女肺活量', 'BMI']] = female[['女体前屈', '女仰卧', '女肺活量', 'BMI']].astype(float)

    for col in ['男1000米跑', '男50米跑']:
        score = rule[col]

        def convert(x):
            for i in range(len(score)):
                if x <= score['成绩'].iloc[0]:
                    if x == 0:
                        return 0
                    return 100
                elif x > score['成绩'].iloc[-1]:
                    return 0
                elif (x > score['成绩'].iloc[i - 1]) and (x <= score['成绩'].iloc[i]):
                    return score['分数'].iloc[i]

        male[col + '成绩'] = male[col].map(convert)

    for col in ['男跳远', '男体前屈', '男引体', '男肺活量']:
        score = rule[col]

        def convert(x):
            for i in range(len(score)):
                if x >= score['成绩'].iloc[i]:
                    return score['分数'].iloc[i]
            return 0

    male[col + '成绩'] = male[col].map(convert)
    col = ['班级', '性别', '男1000米跑', '男1000米跑成绩', '男50米跑', '男50米跑成绩', '男跳远', '男体前屈',
           '男引体', '男肺活量', '男肺活量成绩', '身高', '体重', 'BMI']
    male = male[col]
    male['BMI'] = (male['体重'] / (male['身高'] / 100) ** 2).round(1)
    # 女生成绩
    for col in ['女800米跑', '女50米跑']:
        score = rule[col]

        def convert(x):
            for i in range(len(score)):
                if x <= score['成绩'].iloc[0]:
                    if x == 0:
                        return 0
                    return 100
                elif x > score['成绩'].iloc[-1]:
                    return 0
                elif (x > score['成绩'].iloc[i - 1]) and (x <= score['成绩'].iloc[i]):
                    return score['分数'].iloc[i]

        female[col + '成绩'] = female[col].map(convert)
    for col in ['女跳远', '女体前屈', '女仰卧', '女肺活量']:
        score = rule[col]

        def convert(x):
            for i in range(len(score)):
                if x >= score['成绩'].iloc[i]:
                    return score['分数'].iloc[i]
            return 0

        female[col + '成绩'] = female[col].map(convert)
        col = ['班级', '性别', '女800米跑', '女800米跑成绩', '女50米跑', '女50米跑成绩', '女跳远', '女跳远成绩', '女体前屈',
               '女仰卧', '女肺活量', '身高', '体重', 'BMI']
        female = female[col]
        female['BMI'] = (female['体重'] / (female['身高'] / 100) ** 2).round(1)
        print(male, female)


if __name__=='__main__':
    do(np,pd)